<?php

/**
 * gestion_de_programa actions.
 *
 * @package    progresion-scout
 * @subpackage gestion_de_programa
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
 */
class gestion_de_programaActions extends sfActions
{
 	public function executeMostrar_reporte_de_etapa(sfWebRequest $request){

    	$gestorDeEtapa =  new GestorDeEtapaImpl(new EtapaDaoImpl());
    	$criterioDeBusqueda = new CriterioDeBusqueda();
    	$criterioDeBusqueda->agregar('persona_etapa.id',$request->getParameter('persona_etapa_id'));
	  	$personasEtapa = $gestorDeEtapa->encontrarTodosPersonasEtapa($criterioDeBusqueda);
	  	$this->personaEtapa = $personasEtapa->getFirst();
	  	$criterioDeBusqueda = null;

	  	//Vivencias Colectivas
	  	$tipo = new VivenciaColectiva();
		$this->vivenciasColectivas = $gestorDeEtapa->encontrarTodosVivencias($this->personaEtapa,$tipo);
		$tipo = null;


	  	$gestorDeEtapa = null;

		$this->setTemplate('reporte_de_etapa');
  	}
  	
 public function executeMostrar_asistencia_de_unidad(sfWebRequest $request){

  	$gestorDeUnidad = new GestorDeUnidadImpl(new UnidadDaoImpl());
  	$this->unidad = $gestorDeUnidad->encontrar($request->getParameter('unidad_id'));
  	$gestorDeUnidad = null;

  	$gestorDeAsistencia = new GestorDeAsistenciaImpl(new AsistenciaDaoImpl());
    $this->annos = $gestorDeAsistencia->encontrarAnnosTodos($this->unidad);
    $gestorDeAsistencia = null;

     $this->setTemplate('listado_de_annos_de_asistencia');
  }

  public function executeMostrar_asistencia(sfWebRequest $request){

    $gestorDeUnidad = new GestorDeUnidadImpl(new UnidadDaoImpl());
  	$this->unidad = $gestorDeUnidad->encontrar($request->getParameter('unidad_id'));
  	$gestorDeUnidad = null;

  	$gestorDeAsistencia = new GestorDeAsistenciaImpl(new AsistenciaDaoImpl());
    $this->fechas = $gestorDeAsistencia->encontrarFechasTodos($this->unidad,$request->getParameter('anno'));
    $gestorDeAsistencia = null;

    $this->anno = $request->getParameter('anno');

    $this->setTemplate('asistencia_anual');

  }

  public function executeMostrar_asistencia_por_fecha(sfWebRequest $request){

    $gestorDeUnidad = new GestorDeUnidadImpl(new UnidadDaoImpl());
  	$this->unidad = $gestorDeUnidad->encontrar($request->getParameter('unidad_id'));
  	$gestorDeUnidad = null;

  	$gestorDeAsistencia = new GestorDeAsistenciaImpl(new AsistenciaDaoImpl());
  	$criterioDeBusqueda = new CriterioDeBusqueda();
  	$criterioDeBusqueda->agregar('asistencia.fecha',date('Y-m-d',$request->getParameter('fecha')));
    $this->asistencias = $gestorDeAsistencia->encontrarTodos($this->unidad,$criterioDeBusqueda);
    $criterioDeBusqueda = null;
    $gestorDeAsistencia = null;

    $this->fecha = $request->getParameter('fecha');

    $this->setTemplate('asistencia_por_fecha');

  }

  /**
   *
   * Método para el llenado del formulario de registro de asistencia
   *
   */
  public function executeMostrar_registro_de_asistencia_por_fecha(sfWebRequest $request){

    $gestorDeUnidad = new GestorDeUnidadImpl(new UnidadDaoImpl());
  	$this->unidad = $gestorDeUnidad->encontrar($request->getParameter('unidad_id'));


  	$this->fecha = date('Y-m-d',$request->getParameter('fecha'));

  	$gestorDeAsistencia = new GestorDeAsistenciaImpl(new AsistenciaDaoImpl());
  	$criterioDeBusqueda = new CriterioDeBusqueda();
  	$criterioDeBusqueda->agregar('asistencia.fecha',$this->fecha);
    $asistencias = $gestorDeAsistencia->encontrarTodos($this->unidad,$criterioDeBusqueda);
    //Para que la vista no trabaje comparando tanto se pasa a un array simple.
    $this->asistencias = array();
    foreach($asistencias as $asistencia){
       $this->asistencias[$asistencia->getUnidadPersona()->getId()] = true;
    }

    $criterioDeBusqueda = null;
    $gestorDeAsistencia = null;

    //Necesito encontrar los miembros de la unidad.

    $criterioDeBusqueda = new CriterioDeBusqueda();
  	$criterioDeBusqueda->agregar('unidad_persona.unidad_id',$this->unidad->getId(),'=');
  	$estadoUnidadPersona = new UnidadActual();
  	$criterioDeBusqueda->agregar('unidad_persona.estado_unidad_persona_id',$estadoUnidadPersona->getDiscriminador(),'=');
  	$estadoUnidadPersona = null;

    $criterioDeBusqueda->agregarOrden('persona.nombres','ASC');
  	$criterioDeBusqueda->agregarOrden('persona.apellidos','ASC');

  	$this->unidadPersonas = $gestorDeUnidad->encontrarTodosUnidadPersonas($criterioDeBusqueda);
  	$gestorDeUnidad = null;


    $this->setTemplate('registro_de_asistencia_por_fecha');

  }

  public function executeMostrar_formulario_de_asistencia_de_unidad(sfWebRequest $request){

    $gestorDeUnidad = new GestorDeUnidadImpl(new UnidadDaoImpl());
  	$this->unidad = $gestorDeUnidad->encontrar($request->getParameter('unidad_id'));
  	$gestorDeUnidad = null;

    $this->setTemplate('formulario_de_asistencia_de_unidad');
  }

  public function executeGuardar_asistencia_de_unidad(sfWebRequest $request){

    $gestorDeUnidad = new GestorDeUnidadImpl(new UnidadDaoImpl());
  	$this->unidad = $gestorDeUnidad->encontrar($request->getParameter('unidad_id'));
  	//Ya tengo la unidad - ahora los integrantes.

  	$criterioDeBusqueda = new CriterioDeBusqueda();
  	$criterioDeBusqueda->agregar('unidad_persona.unidad_id',$this->unidad->getId(),'=');
  	$estadoUnidadPersona = new UnidadActual();
  	$criterioDeBusqueda->agregar('unidad_persona.estado_unidad_persona_id',$estadoUnidadPersona->getDiscriminador(),'=');
  	$estadoUnidadPersona = null;

  	$this->personasUnidad = $gestorDeUnidad->encontrarTodosUnidadPersonas($criterioDeBusqueda);

  	//Ya tengo la fecha
  	$this->fecha = $request->getParameter('anno').'-'.$request->getParameter('mes').'-'.$request->getParameter('dia');

  	//Ahora borro todas las asistencias de la fecha indicada - siempre y cuando el estado en la unidad sea actual.
    $gestorDeAsistencia = new GestorDeAsistenciaImpl(new AsistenciaDaoImpl());
  	$criterioDeBusqueda = new CriterioDeBusqueda();

  	$criterioDeBusqueda->agregar('asistencia.fecha',$this->fecha);
    $this->asistencias = $gestorDeAsistencia->encontrarTodos($this->unidad,$criterioDeBusqueda);
    $criterioDeBusqueda = null;

    foreach($this->asistencias as $asistencia){
       $gestorDeAsistencia->borrar($asistencia);
    }

    //Ahora por cada registro de unidad persona debo iterar y agregar un registro.
    $unidadPersonasId = $request->getParameter('asistencia',array());
    $hits = 0;
    foreach ($this->personasUnidad as $personaUnidad){
        if (isset($unidadPersonasId[$personaUnidad->getId()])) {
			//Creo el objeto
			$asistencia = new Asistencia();
			$asistencia->setFecha($this->fecha);
			$asistencia->setUnidadPersona($personaUnidad);
			//Persisto
			$gestorDeAsistencia->guardar($asistencia);
			$hits++;
			$asistencia = null;
        }
    }

    //Mensajes
    Mensajes::getInstance()->agregarExito('Asistencia guardada, '.$hits.' personas asistieron en la fecha indicada.');

    $gestorDeAsistencia = null;
  	$gestorDeUnidad = null;

    $this->setTemplate('mostrar_mensajes');

  }

  	public function handleErrorGuardar_asistencia_de_unidad() {
		$this->registrarMensajes();
		$this->forward('gestion_de_programa','mostrar_formulario_de_asistencia_de_unidad');
  	}
  	
  	
	public function executeMostrar_listado_de_actividades(sfWebRequest $request){
    	$gestorDeUnidad = new GestorDeUnidadImpl(new UnidadDaoImpl());
  		$this->unidad = $gestorDeUnidad->encontrar($request->getParameter('unidad_id'));
  		$gestorDeUnidad = null;

        $gestorDeActividades = new GestorDeActividadImpl(new ActividadDaoImpl());
        $criterioDeBusqueda = new CriterioDeBusqueda();
        $criterioDeBusqueda->agregarOrden('actividad.fecha','DESC');
        $this->actividades = $gestorDeActividades->encontrarTodos($this->unidad,$criterioDeBusqueda);
		$criterioDeBusqueda = null;
        $gestorDeActividades = null;

		$this->setTemplate('listado_de_actividades_de_unidad');
  	}

    public function executeMostrar_formulario_de_actividad_de_unidad(sfWebRequest $request){

	    $gestorDeUnidad = new GestorDeUnidadImpl(new UnidadDaoImpl());
	  	$this->unidad = $gestorDeUnidad->encontrar($request->getParameter('unidad_id'));
	  	$gestorDeUnidad = null;
	  	
	  	$this->actividad = new Actividad();
	
	    $this->setTemplate('formulario_de_actividad_de_unidad');
    }
    
    public function handleErrorGuardar_actividad_de_unidad() {
		$this->registrarMensajes();
		$this->forward('gestion_de_programa','mostrar_formulario_de_actividad_de_unidad');
  	}
  	
  	
  	public function executeGuardar_actividad_de_unidad(sfWebRequest $request){
		
  		$gestorDeUnidad = new GestorDeUnidadImpl(new UnidadDaoImpl());
		$unidad = $gestorDeUnidad->encontrar($request->getParameter('unidad_id'));
				
		$gestorDeActividad = new GestorDeActividadImpl(new ActividadDaoImpl());
		
		$actividad = new Actividad();
		$actividad->setUnidad($unidad);
		$actividad->setNombre($request->getParameter('nombre'));
		$actividad->setFecha($request->getParameter('anno').'-'.$request->getParameter('mes').'-'.$request->getParameter('dia'));
  		
		$actividad = $gestorDeActividad->guardar($actividad);
		
  		//Mensajes
	    Mensajes::getInstance()->agregarExito('Actividad guardada.');
	
	    $gestorDeActividad = null;
	  	$gestorDeUnidad = null;
	
	    $this->setTemplate('mostrar_mensajes');
  	} 	
  	
	public function executeMostrar_listado_de_etapas_en_vivencia(sfWebRequest $request)
	{

    $gestorDeUnidad = new GestorDeUnidadImpl(new UnidadDaoImpl());
  	$this->unidad = $gestorDeUnidad->encontrar($request->getParameter('unidad_id'));
  	$gestorDeUnidad = null;

  	$gestorDeEtapa =  new GestorDeEtapaImpl(new EtapaDaoImpl());

  	$criterioDeBusqueda = new CriterioDeBusqueda();
  	$criterioDeBusqueda->agregar('unidad_persona.unidad_id',$this->unidad->getId(),'=');
  	$estadoUnidadPersona = new UnidadActual();
  	$criterioDeBusqueda->agregar('unidad_persona.estado_unidad_persona_id',$estadoUnidadPersona->getDiscriminador(),'=');
  	$estadoPersonaEtapa = new EtapaEnVivencia();
  	$criterioDeBusqueda->agregar('persona_etapa.estado_persona_etapa_id',$estadoPersonaEtapa->getDiscriminador(),'=');
  	$estadoPersonaEtapa = null;
  	$estadoUnidadPersona = null;
  	$this->personasEtapa = $gestorDeEtapa->encontrarTodosPersonasEtapa($criterioDeBusqueda);
  	$gestorDeEtapa = null;


    $this->setTemplate('listado_de_etapas_en_vivencia');
  	}

    public function executeMostrar_registro_de_etapas_en_vivencia(sfWebRequest $request){

    $gestorDeUnidad = new GestorDeUnidadImpl(new UnidadDaoImpl());
  	$this->unidad = $gestorDeUnidad->encontrar($request->getParameter('unidad_id'));
  	$gestorDeUnidad = null;

  	$gestorDeEtapa =  new GestorDeEtapaImpl(new EtapaDaoImpl());

  	$criterioDeBusqueda = new CriterioDeBusqueda();
  	$criterioDeBusqueda->agregar('unidad_persona.unidad_id',$this->unidad->getId(),'=');
  	$estadoUnidadPersona = new UnidadActual();
  	$criterioDeBusqueda->agregar('unidad_persona.estado_unidad_persona_id',$estadoUnidadPersona->getDiscriminador(),'=');
  	$estadoPersonaEtapa = new EtapaEnVivencia();
  	$criterioDeBusqueda->agregar('persona_etapa.estado_persona_etapa_id',$estadoPersonaEtapa->getDiscriminador(),'=');
  	$estadoPersonaEtapa = null;
  	$estadoUnidadPersona = null;
  	$this->personasEtapa = $gestorDeEtapa->encontrarTodosPersonasEtapa($criterioDeBusqueda);
  	$gestorDeEtapa = null;

    //Salida CSV
    $this->getResponse()->setContentType('text/comma-separated-values');
    $this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename="registro_etapas_unidad.csv"');
    $this->setLayout(false);

    $this->setTemplate('registro_de_etapas');
  }

   public function executeMostrar_listado_de_etapas_ya_vividas(sfWebRequest $request){

    $gestorDeUnidad = new GestorDeUnidadImpl(new UnidadDaoImpl());
  	$this->unidad = $gestorDeUnidad->encontrar($request->getParameter('unidad_id'));
  	$gestorDeUnidad = null;

  	$gestorDeEtapa =  new GestorDeEtapaImpl(new EtapaDaoImpl());

  	$criterioDeBusqueda = new CriterioDeBusqueda();
  	$criterioDeBusqueda->agregar('unidad_persona.unidad_id',$this->unidad->getId(),'=');
  	$estadoUnidadPersona = new UnidadActual();
  	$criterioDeBusqueda->agregar('unidad_persona.estado_unidad_persona_id',$estadoUnidadPersona->getDiscriminador(),'=');
  	$estadoPersonaEtapa = new EtapaFinalizada();
  	$criterioDeBusqueda->agregar('persona_etapa.estado_persona_etapa_id',$estadoPersonaEtapa->getDiscriminador(),'=');
  	$estadoPersonaEtapa = null;
  	$estadoUnidadPersona = null;
  	$this->personasEtapa = $gestorDeEtapa->encontrarTodosPersonasEtapa($criterioDeBusqueda);
  	$gestorDeEtapa = null;


    $this->setTemplate('listado_de_etapas_ya_vividas');
  }

  public function executeMostrar_listado_de_personas_sin_etapa(sfWebRequest $request){

  	$gestorDeUnidad = new GestorDeUnidadImpl(new UnidadDaoImpl());
  	$this->unidad = $gestorDeUnidad->encontrar($request->getParameter('unidad_id'));
  	$gestorDeUnidad = null;

  	$gestorDeEtapa =  new GestorDeEtapaImpl(new EtapaDaoImpl());

  	$criterioDeBusqueda = new CriterioDeBusqueda();
  	$criterioDeBusqueda->agregar('unidad_persona.unidad_id',$this->unidad->getId(),'=');
  	$estadoUnidadPersona = new UnidadActual();
  	$criterioDeBusqueda->agregar('unidad_persona.estado_unidad_persona_id',$estadoUnidadPersona->getDiscriminador(),'=');
  	$estadoUnidadPersona = null;
  	$this->unidadPersonas = $gestorDeEtapa->encontrarTodosSinEtapa($criterioDeBusqueda);
  	$gestorDeEtapa = null;


	$this->setTemplate('listado_de_personas_sin_etapa');
  }

  public function executeMostrar_registro_de_personas_sin_etapa(sfWebRequest $request){

  	$gestorDeUnidad = new GestorDeUnidadImpl(new UnidadDaoImpl());
  	$this->unidad = $gestorDeUnidad->encontrar($request->getParameter('unidad_id'));
  	$gestorDeUnidad = null;

  	$gestorDeEtapa =  new GestorDeEtapaImpl(new EtapaDaoImpl());

  	$criterioDeBusqueda = new CriterioDeBusqueda();
  	$criterioDeBusqueda->agregar('unidad_persona.unidad_id',$this->unidad->getId(),'=');
  	$estadoUnidadPersona = new UnidadActual();
  	$criterioDeBusqueda->agregar('unidad_persona.estado_unidad_persona_id',$estadoUnidadPersona->getDiscriminador(),'=');
  	$estadoUnidadPersona = null;
  	$this->unidadPersonas = $gestorDeEtapa->encontrarTodosSinEtapa($criterioDeBusqueda);
  	$gestorDeEtapa = null;

    //Salida CSV
    $this->getResponse()->setContentType('text/comma-separated-values');
    $this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename="registro_etapas_unidad.csv"');
    $this->setLayout(false);

    $this->setTemplate('registro_de_personas_sin_etapa');


  }
  
	public function executeMostrar_registro_de_etapas_en_vivencia_por_persona(sfWebRequest $request)
	{
		
		$gestorDeUnidad = new GestorDeUnidadImpl(new UnidadDaoImpl());
  		$this->unidad = $gestorDeUnidad->encontrar($request->getParameter('unidad_id'));
  		$gestorDeUnidad = null;
		
		//Necesito todas las etapas actuales ordenadas por nombre la persona
    	$gestorDeEtapa =  new GestorDeEtapaImpl(new EtapaDaoImpl());
    	$criterioDeBusqueda = new CriterioDeBusqueda();
    	$criterioDeBusqueda->agregar('unidad.id',$this->unidad->getId(),'=');
    	$criterioDeBusqueda->agregar('estado_persona_etapa_id','1','=');    	
    	$criterioDeBusqueda->agregarOrden('persona.nombres','ASC');
    	
	  	$personasEtapa = $gestorDeEtapa->encontrarTodosPersonasEtapa($criterioDeBusqueda);       
        
        $this->personasEtapa = array();
        foreach($personasEtapa as $personaEtapa){
        	if ($personaEtapa->getPersona()->getUnidadPersona()->getFirst()->getEstadoUnidadPersona() instanceof UnidadActual) {
        		$this->personasEtapa[] = $personaEtapa;		
        	}
        }
        
        
	  	
	  	$criterioDeBusqueda = null;

	  	//Vivencias Colectivas
	  	$tipo = new VivenciaColectiva();
	  	$this->vivenciasColectivas = array();
	  	foreach($this->personasEtapa as $personaEtapa){
	  		$this->vivenciasColectivas[$personaEtapa->getId()] = array();
			$this->vivenciasColectivas[$personaEtapa->getId()][] = $gestorDeEtapa->encontrarTodosVivencias($personaEtapa,$tipo);
	  	}
		$tipo = null;

	  	$gestorDeEtapa = null;
	  	
	  
	  	$config = sfTCPDFPluginConfigHandler::loadConfig();
          sfTCPDFPluginConfigHandler::includeLangFile($this->getUser()->getCulture());
      
          $doc_title    = "Reporte de progresión - ".$this->unidad->toString();
          $doc_subject  = "Reporte de progresión de la ".$this->unidad->toString();
          $doc_keywords = "test keywords";
          
          //create new PDF document (document units are set by default to millimeters)
          $pdf = new sfTCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true);
      
          // set document information
          $pdf->SetCreator(PDF_CREATOR);
          $pdf->SetAuthor(PDF_AUTHOR);
          $pdf->SetTitle($doc_title);
          $pdf->SetSubject($doc_subject);
          $pdf->SetKeywords($doc_keywords);
      
          $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, 'SISTEMA DE PROGRESIÓN GUÍAS Y SCOUTS', 'REPORTE DE PROGRESIÓN'.chr(10).$this->unidad->toString().chr(10).date('d-m-Y'));
      
          //set margins
          $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
      
          //set auto page breaks
          $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
          $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
          $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
          $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); //set image scale factor
      
          $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
          $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
      
          $pdf->setLanguageArray('es'); //set language items
               
          
          //Itero 
          
          foreach ($this->personasEtapa as $personaEtapa) {
          	$pdf->AddPage();          	
          	$contenido = '<h1>'.$personaEtapa->getPersona()->getNombres().' '.$personaEtapa->getPersona()->getApellidos().'</h1>';
            $contenido .= '<h2>'.$personaEtapa->getEtapa()->getNombre().'</h2>';
            
            $contenido .= '<h3>Objetivos trabajados colectivamente: </h3>';
                      
			foreach ($this->vivenciasColectivas[$personaEtapa->getId()] as $vivenciaColectivaArray) {
				foreach ($vivenciaColectivaArray as $vivenciaColectiva) {
					$contenido .= '<p>';
					$contenido .= '<b>'.$vivenciaColectiva->getObjetivoEducativo()->getAreaDeDesarrollo()->getNombre().' '.$vivenciaColectiva->getObjetivoEducativo()->getNumero().': </b>';
		    		$contenido .= '<i>'.$vivenciaColectiva->getObjetivoEducativo()->getTexto().'</i>';
		    		$contenido .= '</p>';
				}	
			}	
          	
          	
          	$pdf->writeHTML($contenido, true, 0);
          }
          
      
         
          //Close and output PDF document
          $pdf->Output();
      
          return sfView::NONE;
	  	
  	}
	
}
